using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("UIBScrollable")]
	public class UIBScrollable : PegUICustomBehavior
	{
		public enum ScrollDirection
		{
			X,
			Y,
			Z
		}

		public enum HeightMode
		{
			UseHeightCallback,
			UseScrollableItem,
			UseBoxCollider
		}

		[Attribute38("UIBScrollable.VisibleAffectedObject")]
		public class VisibleAffectedObject : MonoClass
		{
			public GameObject Obj => method_3<GameObject>("Obj");

			public Vector3 Extents => method_2<Vector3>("Extents");

			public bool Visible => method_2<bool>("Visible");

			public VisibleAffectedObject(IntPtr address, string className)
				: base(address, className)
			{
			}

			public VisibleAffectedObject(IntPtr address)
				: this(address, "VisibleAffectedObject")
			{
			}
		}

		public bool m_UseCameraFromLayer => method_2<bool>("m_UseCameraFromLayer");

		public float m_ScrollWheelAmount => method_2<float>("m_ScrollWheelAmount");

		public float m_ScrollBottomPadding => method_2<float>("m_ScrollBottomPadding");

		public iTween.EaseType m_ScrollEaseType => method_2<iTween.EaseType>("m_ScrollEaseType");

		public float m_ScrollTweenTime => method_2<float>("m_ScrollTweenTime");

		public ScrollDirection m_ScrollPlane => method_2<ScrollDirection>("m_ScrollPlane");

		public bool m_ScrollDirectionReverse => method_2<bool>("m_ScrollDirectionReverse");

		public bool m_OverridePegUI => method_2<bool>("m_OverridePegUI");

		public bool m_ForceScrollAreaHitTest => method_2<bool>("m_ForceScrollAreaHitTest");

		public BoxCollider m_ScrollBounds => method_3<BoxCollider>("m_ScrollBounds");

		public BoxCollider m_TouchDragFullArea => method_3<BoxCollider>("m_TouchDragFullArea");

		public BoxCollider m_ScrollTrack => method_3<BoxCollider>("m_ScrollTrack");

		public ScrollBarThumb m_ScrollThumb => method_3<ScrollBarThumb>("m_ScrollThumb");

		public bool m_HideThumbWhenDisabled => method_2<bool>("m_HideThumbWhenDisabled");

		public GameObject m_scrollTrackCover => method_3<GameObject>("m_scrollTrackCover");

		public GameObject m_ScrollObject => method_3<GameObject>("m_ScrollObject");

		public float m_VisibleObjectThreshold => method_2<float>("m_VisibleObjectThreshold");

		public float m_DeckTileDragThreshold => method_2<float>("m_DeckTileDragThreshold");

		public float m_ScrollDragThreshold => method_2<float>("m_ScrollDragThreshold");

		public float m_MinKineticScrollSpeed => method_2<float>("m_MinKineticScrollSpeed");

		public float m_KineticScrollFriction => method_2<float>("m_KineticScrollFriction");

		public float m_ScrollBoundsSpringK => method_2<float>("m_ScrollBoundsSpringK");

		public float m_MinOutOfBoundsScrollValue => method_2<float>("m_MinOutOfBoundsScrollValue");

		public float m_ScrollDeltaMultiplier => method_2<float>("m_ScrollDeltaMultiplier");

		public List<BoxCollider> m_TouchScrollBlockers => method_3<Class271<BoxCollider>>("m_TouchScrollBlockers")?.method_25();

		public HeightMode m_HeightMode => method_2<HeightMode>("m_HeightMode");

		public bool m_Enabled => method_2<bool>("m_Enabled");

		public float m_ScrollValue => method_2<float>("m_ScrollValue");

		public float m_LastTouchScrollValue => method_2<float>("m_LastTouchScrollValue");

		public bool m_InputBlocked => method_2<bool>("m_InputBlocked");

		public bool m_Pause => method_2<bool>("m_Pause");

		public float m_TouchDragBeginScrollValue => method_2<float>("m_TouchDragBeginScrollValue");

		public Vector3 m_ScrollAreaStartPos => method_2<Vector3>("m_ScrollAreaStartPos");

		public float m_ScrollThumbStartYPos => method_2<float>("m_ScrollThumbStartYPos");

		public float m_LastScrollHeightRecorded => method_2<float>("m_LastScrollHeightRecorded");

		public float m_PolledScrollHeight => method_2<float>("m_PolledScrollHeight");

		public List<VisibleAffectedObject> m_VisibleAffectedObjects => method_3<Class271<VisibleAffectedObject>>("m_VisibleAffectedObjects")?.method_25();

		public bool m_ForceShowVisibleAffectedObjects => method_2<bool>("m_ForceShowVisibleAffectedObjects");

		public float ScrollValue => method_11<float>("get_ScrollValue", Array.Empty<object>());

		public UIBScrollable(IntPtr address, string className)
			: base(address, className)
		{
		}

		public UIBScrollable(IntPtr address)
			: this(address, "UIBScrollable")
		{
		}

		public static void DefaultVisibleAffectedCallback(GameObject obj, bool visible)
		{
			MonoClass.smethod_18(TritonHs.MainAssemblyPath, "", "UIBScrollable", "DefaultVisibleAffectedCallback", obj, visible);
		}

		public new void Awake()
		{
			method_8("Awake");
		}

		public void Start()
		{
			method_8("Start");
		}

		public new void OnDestroy()
		{
			method_8("OnDestroy");
		}

		public void Update()
		{
			method_8("Update");
		}

		public new bool UpdateUI()
		{
			return method_11<bool>("UpdateUI", Array.Empty<object>());
		}

		public void ResetScrollStartPosition()
		{
			method_9("ResetScrollStartPosition", new Class276.Enum20[0]);
		}

		public void ResetScrollStartPosition(Vector3 position)
		{
			method_9("ResetScrollStartPosition", new Class276.Enum20[1] { Class276.Enum20.ValueType }, position);
		}

		public void ClearVisibleAffectObjects()
		{
			method_8("ClearVisibleAffectObjects");
		}

		public void ForceVisibleAffectedObjectsShow(bool show)
		{
			method_8("ForceVisibleAffectedObjectsShow", show);
		}

		public void Pause(bool pause)
		{
			method_8("Pause", pause);
		}

		public void Enable(bool enable)
		{
			method_8("Enable", enable);
		}

		public bool IsEnabled()
		{
			return method_11<bool>("IsEnabled", Array.Empty<object>());
		}

		public bool IsEnabledAndScrollable()
		{
			return method_11<bool>("IsEnabledAndScrollable", Array.Empty<object>());
		}

		public float GetScroll()
		{
			return method_11<float>("GetScroll", Array.Empty<object>());
		}

		public void SaveScroll(string savedName)
		{
			method_8("SaveScroll", savedName);
		}

		public void LoadScroll(string savedName, bool snap)
		{
			method_8("LoadScroll", savedName, snap);
		}

		public bool EnableIfNeeded()
		{
			return method_11<bool>("EnableIfNeeded", Array.Empty<object>());
		}

		public bool IsScrollNeeded()
		{
			return method_11<bool>("IsScrollNeeded", Array.Empty<object>());
		}

		public float PollScrollHeight()
		{
			return method_11<float>("PollScrollHeight", Array.Empty<object>());
		}

		public void SetScroll(float percentage, bool blockInputWhileScrolling, bool clamp)
		{
			method_9("SetScroll", new Class276.Enum20[3]
			{
				Class276.Enum20.R4,
				Class276.Enum20.Boolean,
				Class276.Enum20.Boolean
			}, percentage, blockInputWhileScrolling, clamp);
		}

		public void SetScroll(float percentage, iTween.EaseType tweenType, float tweenTime, bool blockInputWhileScrolling, bool clamp)
		{
			method_9("SetScroll", new Class276.Enum20[5]
			{
				Class276.Enum20.R4,
				Class276.Enum20.ValueType,
				Class276.Enum20.R4,
				Class276.Enum20.Boolean,
				Class276.Enum20.Boolean
			}, percentage, tweenType, tweenTime, blockInputWhileScrolling, clamp);
		}

		public void SetScrollSnap(float percentage, bool clamp)
		{
			method_9("SetScrollSnap", new Class276.Enum20[2]
			{
				Class276.Enum20.R4,
				Class276.Enum20.Boolean
			}, percentage, clamp);
		}

		public void SetHeight(float height)
		{
			method_8("SetHeight", height);
		}

		public void UpdateScroll()
		{
			method_8("UpdateScroll");
		}

		public void CenterWorldPosition(Vector3 position)
		{
			method_8("CenterWorldPosition", position);
		}

		public bool IsObjectVisibleInScrollArea(GameObject obj, Vector3 extents, bool fullyVisible)
		{
			return method_11<bool>("IsObjectVisibleInScrollArea", new object[3] { obj, extents, fullyVisible });
		}

		public bool IsDragging()
		{
			return method_11<bool>("IsDragging", Array.Empty<object>());
		}

		public bool IsTouchDragging()
		{
			return method_11<bool>("IsTouchDragging", Array.Empty<object>());
		}

		public void SetScrollImmediate(float percentage)
		{
			method_9("SetScrollImmediate", new Class276.Enum20[1] { Class276.Enum20.R4 }, percentage);
		}

		public void StartDragging()
		{
			method_8("StartDragging");
		}

		public void UpdateHeight()
		{
			method_8("UpdateHeight");
		}

		public void UpdateTouch()
		{
			method_8("UpdateTouch");
		}

		public void Drag()
		{
			method_8("Drag");
		}

		public void ResetTouchDrag()
		{
			method_8("ResetTouchDrag");
		}

		public float GetScrollTrackTop1D()
		{
			return method_11<float>("GetScrollTrackTop1D", Array.Empty<object>());
		}

		public float GetScrollTrackBtm1D()
		{
			return method_11<float>("GetScrollTrackBtm1D", Array.Empty<object>());
		}

		public Vector3 GetScrollTrackTop()
		{
			return method_11<Vector3>("GetScrollTrackTop", Array.Empty<object>());
		}

		public Vector3 GetScrollTrackBtm()
		{
			return method_11<Vector3>("GetScrollTrackBtm", Array.Empty<object>());
		}

		public void AddScroll(float amount)
		{
			method_8("AddScroll", amount);
		}

		public void UpdateThumbPosition()
		{
			method_8("UpdateThumbPosition");
		}

		public Vector3 GetTotalScrollHeightVector(bool convertToLocalSpace)
		{
			return method_11<Vector3>("GetTotalScrollHeightVector", new object[1] { convertToLocalSpace });
		}

		public float GetTotalScrollHeight()
		{
			return method_11<float>("GetTotalScrollHeight", Array.Empty<object>());
		}

		public float GetScrollValueDelta(float worldDelta)
		{
			return method_11<float>("GetScrollValueDelta", new object[1] { worldDelta });
		}

		public float GetOutOfBoundsDist(float scrollValue)
		{
			return method_11<float>("GetOutOfBoundsDist", new object[1] { scrollValue });
		}

		public void FireEnableScrollEvent()
		{
			method_8("FireEnableScrollEvent");
		}

		public void UpdateAndFireVisibleAffectedObjects()
		{
			method_8("UpdateAndFireVisibleAffectedObjects");
		}

		public float GetScrollBoundsHeight()
		{
			return method_11<float>("GetScrollBoundsHeight", Array.Empty<object>());
		}

		public void FireTouchStartEvent()
		{
			method_8("FireTouchStartEvent");
		}

		public void FireTouchEndEvent()
		{
			method_8("FireTouchEndEvent");
		}

		public float GetScrollableItemsHeight()
		{
			return method_11<float>("GetScrollableItemsHeight", Array.Empty<object>());
		}

		public Camera GetScrollCamera()
		{
			return method_14<Camera>("GetScrollCamera", Array.Empty<object>());
		}

		public void SaveScrollThumbStartHeight()
		{
			method_8("SaveScrollThumbStartHeight");
		}
	}
}
